package com.jandan.ui.client.service;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.google.gwt.user.client.rpc.AsyncCallback;
import com.jandan.ui.model.LearnedData;
import com.jandan.ui.model.LearnedWord;
import com.jandan.ui.model.Lesson;
import com.jandan.ui.model.ReviewInfo;
import com.jandan.ui.model.Word;

public interface LessonServiceAsync {

	public void getLessonList(AsyncCallback<List<Lesson>> callback);

	public void insertLesson(Lesson lesson, AsyncCallback<Lesson> callback);

	public void deleteLesson(long lessonID, AsyncCallback<?> callback);
	
	public void writeback(List<LearnedWord> words, AsyncCallback<?> callback);

	public void getLesson(long lessonID, AsyncCallback<Lesson> callback);

	public void getWordListByLessonIDAndLibNumber(long lessonID,int libNumber, AsyncCallback<List<Word>> callback);
	
	public void getNewWordList(long lessonID,int libNumber, AsyncCallback<List<Word>> callback);
	
	public void getLearnedWordList(long lessonID, AsyncCallback<List<LearnedWord>> callback);
	
	public void getLearnedWordList(long lessonID,int libNumber, AsyncCallback<List<LearnedWord>> callback);
	
	public void getNewWordAndLearnedWordListByLessonID(long lessonID,int libNumber, AsyncCallback<Map<String,List>> callback);

	public void getTodayReviewInfo(long lessonID, AsyncCallback<ReviewInfo> callback);

	public void getReviewInfoOfSomeDay(long lessonID,Date date, AsyncCallback<ReviewInfo> callback);

	public void getReviewInfoListByToday(long lessonID, AsyncCallback<List<ReviewInfo>> callback);
	
	public void getReviewInfoList(long lessonID, AsyncCallback<List<ReviewInfo>> callback);
	
	public void getTodayReviewLearnedWordList(long lessonID, AsyncCallback<List<LearnedWord>> callback);
	
	public void getReviewLearnedWordList(long lessonID, List<Date> dateList, AsyncCallback<List<LearnedWord>> callback);
	
	public void updateLesson(Lesson lesson, AsyncCallback<?> callback);
	
	public void getLearnedData(long lessonID, AsyncCallback<LearnedData> callback);

}
